'''
给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
假设环境不允许存储 64 位整数（有符号或无符号）。

输入：x = -123
输出：-321
'''

import re

class Solution01:
    '''字符串转换数字'''
    def myAtoi(self, s: str) -> int:
        '''
        使用正则表达式 ^：匹配字符串开头，[\+\-]：代表一个+字符或-字符，?：前面一个字符可有可无，\d：一个数字，+：前面一个字符的一个或多个，\D：一个非数字字符
        max(min(数字, 2**31 - 1), -2**31) 用来防止结果越界
        '''
        # *re前的*代表解包，[1,2,3] --> 1,2,3
        # s.lstrip()去掉字符串左边的空格
        return max(min(int(*re.findall('^[\+\-]?\d+', s.lstrip())), 2**31 - 1), -2**31)

s1 = "4193 with words"
s = Solution01()
print(s.myAtoi(s1))

str2 = "   www. manhuan. net   "
str_val = str2.lstrip()
print(str_val.strip())

'''-----------------------------------------------------'''


class Solution02:
    '''整数反转'''
    def reverse(self, x: int) -> int:
        '''[1, -1][x < 0]
        x < 0为真，则取 -1；
        x < 0为假，则取 1
        '''
        y = [1, -1][x < 0] * int(str(abs(x))[::-1])
        return y if y.bit_length() < 32 else 0


x = -1234
s = Solution02()
print(s.reverse(x))

print([1, -1][x < 0])
